//
//  WBBaseViewController.swift
//  weibo
//
//  Created by 长城 on 16/12/8.
//  Copyright © 2016年 dhsr. All rights reserved.
//

import UIKit
//所有主控制器的基类控制器
class WBBaseViewController: UIViewController {
    
    var tableview : UITableView?
    //访客视图信息字典
    var visitorInfoDict : [String:String]?
    //用户登录标记
    var userLogon = true
    //刷新控件
    var refreshControl : UIRefreshControl?
    //上拉刷新标记
    var isPullUp = false
    
    override func viewDidLoad() {
        super.viewDidLoad()

        setupUI()
        loaddata()
    }
    //加载数据 - 具体的实现由子类负责
    func loaddata(){
        refreshControl?.endRefreshing()
    }
}

// MARK: - 访客视图监听方法
extension WBBaseViewController{
    func login(){
        print("用户登录")
    }
    func register(){
        print("用户注册")
    }
}
// MARK: - 设置界面
extension WBBaseViewController{
    func setupUI(){
        view.backgroundColor = #colorLiteral(red: 0.05882352963, green: 0.180392161, blue: 0.2470588237, alpha: 1)
        
        //取消自动缩进
        automaticallyAdjustsScrollViewInsets = false
        
        userLogon ? setupTableView() : setupVisitorView()
        
    }
    //设置访客视图
    func setupVisitorView(){
        let visitorView = WBVisitorView(frame: view.bounds)
        
        view.insertSubview(visitorView, belowSubview: (navigationController?.navigationBar)!)
        
        visitorView.visitorInfo = visitorInfoDict
        
        //设置访客视图按钮监听方法
        visitorView.loginBtn.addTarget(self, action: #selector(login), for: .touchUpInside)
        visitorView.registerBtn.addTarget(self, action: #selector(register), for: .touchUpInside)
        
        //设置导航条按钮
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(register))
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "登录", style: .plain, target: self, action: #selector(login))
    }
    
    //设置表格视图
    func setupTableView(){
        tableview = UITableView(frame: view.bounds, style: .plain)
        
        view.addSubview(tableview!)
        
        //设置数据源和代理-〉目的：子类直接实现数据源方法
        tableview?.dataSource = self
        tableview?.delegate = self
        
        //设置内容缩进
        tableview?.contentInset = UIEdgeInsets(top:(navigationController?.navigationBar.bounds.height ?? 44)+20, left: 0, bottom: tabBarController?.tabBar.bounds.height ?? 49, right: 0)
        
        //设置刷新控件
        //1 实例化控件
        refreshControl = UIRefreshControl()
        
        //2 添加到表格视图
        tableview?.addSubview(refreshControl!)
        
        //3 添加监听方法
        refreshControl?.addTarget(self, action: #selector(loaddata), for: .valueChanged)
    }
}

// MARK: - <#UITableViewDataSource,UITableViewDelegate#>
extension WBBaseViewController:UITableViewDataSource,UITableViewDelegate{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    //基类只是准备方法，子类负责具体实现
    //子类的数据源方法
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    
    //在显示最后一行时，做上拉刷新
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //1 判断indexpatch是否为最后一行(indexpatch.section(最大)/indexpatch.row(最后一行))
        //row
        let row = indexPath.row
        //section
        let section = tableView.numberOfSections - 1
        
        if row < 0 || section < 0{
            return
        }
        //行数
        let count = tableView.numberOfRows(inSection: section)
        //如果是最后一行，同时没有做上拉刷新动作
        if row == (count-1) && !isPullUp{
            isPullUp = true
            //开始刷新
            loaddata()
        }
    }
}
